home *** CD-ROM | disk | FTP | other *** search
- program lit;
-
-
-
-
- uses crt,dos;
-
- const pgup = #73;
- fleh = #72;
- pgdn = #81;
- fleb = #80;
- home_= #71;
- end_ = #79;
- esc = 27;
- ret = 13;
- dl : Char = 'M';
- ls : Char = '5';
- rs : Char = 'F';
- up : Char = #24;
- dn : Char = #25;
- sl : Char = 'D';
- blanc =' ';
- max_char_par_ligne = 79;
- max_ligne_par_page = 22;
- nom_du_fichier : string[30]='d:\compus\astroc.txt';
- ecran ='monoherc';
-
- type
-
- pagetype = array[1..max_ligne_par_page] of string[max_char_par_ligne];
-
- dll = ^ dlr;
- dlr = record
- no :integer;
- page :pagetype;
- suivant:dll;
- prede :dll;
- end;
-
-
- var fi : text;
- pred,
- tempo ,
- debut,t : dll;
- r,r_ : char;
- page_temp: pagetype;
-
- i,j,k : integer;
- ou ,npagetot : integer;
- by : real;
- mlp,mcl,orr:real;
- fk : boolean;
-
- {---------------------------------------------------------------------}
-
- procedure scr(npagetot :integer);
- var
- j:integer;
- begin
- window(1,24,80,25);
- clrscr;
- textcolor(15);
- textbackground(0);
- gotoxy(1,1); for j:=1 to 80 do write(sl);
- gotoxy(1,2); write('Pgup ',#24);
- GotoXY(8,1); write('B');
- GotoXY(8,2); write('3');
- gotoxy(9,2); write ('Pgdn ',#25);
- GotoXY(16,1); write('B');
- GotoXY(16,2); write('3');
- gotoxy(17,2); write('Home ');
- GotoXY(23,1); write('B');
- GotoXY(23,2); write('3');
- gotoxy(24,2); write('End ');
- GotoXY(31,1); write('B');
- GotoXY(31,2); write('3');
- gotoxy(32,2); write('Esc ');
- GotoXY(42,1); write('B');
- GotoXY(42,2); write('3');
- gotoxy(43,2); write('Page:');write(' ');write('/');
- gotoxy(53,2); write(npagetot:5);
- GotoXY(58,1); write('B');
- GotoXY(58,2); write('3');
- if length(nom_du_fichier) > 18 then begin
- for i:=1 to 18 do write(nom_du_fichier[i]);
- write('...');
- end
- else write(nom_du_fichier);
- textcolor(7);
- textbackground(0);
- window(1,1,80,23);
-
-
- end;
- {---------------------------------------------------------------------}
-
- procedure a_jour(num :integer);
- var x,y :integer;
- s : char;
- begin
- x := wherex; y := wherey;
- window(48,24,51,25);
-
- textcolor(7);
- textbackground(0);
- gotoxy(1,2);
- clreol;
- write( num :3 );
- window(1,1,80,23);
-
- end;
-
-
-
- {-------------------------------------------------------------------}
-
- procedure curseur(size:char);
-
- var regis : registers;
-
-
- begin
-
- size := upcase (size);
- if ecran = 'Monoherc' then
- i := 6
- else
- i := 6;{0 initialement}
- regis.ah := $01;
-
- if size ='O' then
- begin
- regis.ch :=$20;
- regis.cl :=$00;
- end
- else if size ='B' then
- begin
- regis.ch := 0;
- regis.cl := 7 +i;
- end
- else begin
- regis.ch := 6 + i;
- regis.cl := 7 + i;
- end;
- intr($10,regis);
-
- end;
- {-------------------------------------------------------------------}
- procedure creer_liste_double(VAR npagetot :integer);
- begin
- k:=1;
- ou :=1;
- clrscr;
- mlp :=max_ligne_par_page;
- mcl :=max_char_par_ligne;
- assign(fi,nom_du_fichier); reset(fi);
-
-
- debut := nil;
- while not(eof(fi)) do begin
- if debut = nil then begin
- for j := 1 to max_ligne_par_page do
- readln(fi,page_temp[j]);
- new(tempo);
-
- tempo^.no:=ou;
- debut :=tempo;
- pred := tempo;
- tempo^.suivant := nil;
- tempo^.prede := nil;
- for j := 1 to max_ligne_par_page do
- tempo^.page[j] := page_temp[j] ;
- end
-
- else begin
- for j := 1 to max_ligne_par_page do
- readln(fi,page_temp[j]);
- k:= k+1;
- ou := ou+1;
-
- pred := tempo;
- new(tempo);
- tempo^.no:=ou;
- pred^.suivant := tempo;
- tempo^.prede := pred;
- tempo^.suivant:= nil;
- for j := 1 to max_ligne_par_page do
- tempo^.page[j] := page_temp[j] ;
- pred:= tempo;
- end;
- orr :=ou;
-
- by := orr*mlp*mcl;
- gotoxy(36,8); write('Pegase (c).');
- gotoxy(30,10);write('Lignes lues : ');clreol;write(max_ligne_par_page*ou);
- gotoxy(30,12);write('Bytes lus :');clreol;write(by :10:0);
- gotoxy(30,14);write('KBytes lus :');clreol;write(by/1024 :10:2);
- gotoxy(30,16);write('Tas (Bytes) :');clreol;write( maxavail:10);
- gotoxy(30,18);write('Tas (KBytes):');clreol;write( maxavail/1024 :10:2);
-
- end;
-
- tempo^.suivant := debut;
-
- debut^.prede := tempo;
- close(fi);
- npagetot := k;
-
-
- end;
-
- {-------------------------------------------------------------------}
- {main}
-
- begin
-
- textcolor(15);
- textbackground(0);
- curseur('o');
-
- creer_liste_double(npagetot);
- scr(npagetot);
- r:=' ';
- new(tempo);
- tempo :=debut;
- pred :=nil;
-
- repeat
- if tempo <> nil then begin
-
- textcolor(0);
- textbackground(7);
- clrscr;
-
-
- for j := 1 to max_ligne_par_page do
- writeln(tempo^.page[j]);
- a_jour(tempo^.no);
- window(1,1,80,23);
-
- fk := false;
- r := readkey;
- if r = #0 then begin
- fk := true;
- case readkey of
-
- fleb, pgdn :begin
- tempo := tempo^.suivant;
- end;
- fleh, pgup : begin
- tempo := tempo^.prede;;
- end;
- home_ : tempo := debut;
- end_ : begin
- for i:= 1 to (npagetot-tempo^.no) do
- tempo := tempo^.suivant;
- end;
- end;
- end;
-
- end else begin
- tempo :=tempo^.suivant;
- write(^g^g);
- end;
- until not(fk) and (r =#27);
-
- tempo:=debut;
- for i:=1 to npagetot do begin
- dispose(tempo);
- tempo:=tempo^.suivant;
- end;
-
-
-
-
- end.